#include<iostream>
#include<queue>
using namespace std;

namespace Mango
{
//默认以deque作为容器适配器
//要作为stack的容器适配器，必须要满足：支持尾插和尾删，所以：vector list deque都可以
template<class T,class Container = deque<T>>
class Stack
{
public:
  void push(const T& val)
  {
    _con.push_back(val);
  }
  void pop()
  {
    _con.pop_back();
  }
  bool empty() const 
  {
    return _con.empty();
  }
  size_t size() const 
  {
    return _con.size();
  }
  T& top()
  {
    return _con.back();
  }
private:
  Container _con; 
};

//要作为queue的容器适配器，必须要满足：支持尾插和头删，所以：list deque都可以 vector不支持头删,所以不可以
template<class T,class Container = deque<T>>
class queue 
{
public:
  void push(const T& val)
  {
    _con.push_back(val);
  }
  void pop()
  {
    _con.pop_front();
  }
  T& front()
  {
    return _con.front();
  }
  T& back()
  {
    return _con.back();
  }
  bool empty() const 
  {
    return _con.empty();
  }
  size_t size() const 
  {
    return _con.size();
  }
private: 
  Container _con;
};
}
